Определите, можно ли получить два
треугольника с заданными длинами сторон, разрезав некоторый прямоугольник одним
разрезом и свободно вращая и переворачивая полученные куски.
Вход. Состоит
из двух строк. Первая строка содержит три натуральных числа – длины сторон
первого треугольника. Вторая строка содержит три натуральных числа – длины
сторон второго треугольника. Известно, что треугольники являются корректными.
Все длины сторон не более 100.
Выход. Сообщить,
существует ли прямоугольник, который можно было бы разрезать на треугольники с
заданными длинами сторон. Если такой прямоугольник существует, выведите YES. В
противном случае выведите NO.
Пример входа 1 |
Пример выхода 1 |
3 4 5 4 3 5 |
YES |
|
|
Пример входа 2 |
Пример выхода 2 |
3 4 6 4 6 3 |
NO |
математика
Пусть a, b, c – длины сторон первого
треугольника, d, e, f – длины
сторон второго треугольника. Отсортируем стороны треугольников так чтобы
выполнялись неравенства a ≤ b ≤ c и d ≤ e ≤ f. Из двух треугольников можно сложить прямоугольник только
если их соответствующие стороны попарно равны (a = d, b = e,
c = f) и если оба треугольника являются прямоугольными (a2 + b2 = c2,
d2 + e2 = f2).
Реализация алгоритма
Читаем входные данные.
scanf("%d %d %d %d %d
%d",&a,&b,&c,&d,&e,&f);
Упорядочим длины сторон первого треугольника так чтобы a ≤ b ≤ c.
if (a > c) swap(a, c);
if (b > c) swap(b, c);
if (a > b) swap(a, b);
Упорядочим длины сторон второго треугольника так чтобы d ≤ e ≤ f.
if (d > f) swap(d, f);
if (e > f) swap(e, f);
if (d > e) swap(d, e);
Выводим YES, если соответствующие стороны треугольников
попарно равны и треугольники прямоугольные.
if (a == d && b == e && c == f
&& a*a + b*b == c*c) printf("YES\n");
else printf("NO\n");